﻿using System.Collections.Generic;
using System.Linq;
using System;
using PSE.Tools.Util.Entidades;
using PSE.Tools.CadastroProdutos.Entidades;
using PSE.Tools.Util.ExtensoesMetodos;

namespace PSE.Tools.CadastroMensagens.Entidades
{
    public struct UsuarioFiltro
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Login { get; set; }
    }

    /// <summary>
    /// Usuário logado na máquina 
    /// Autenticação: LDAP
    /// </summary>
    public class Usuario : IEntidade
    {
        #region [ Propriedades ]

        /// <summary>
        /// Código do Usuário
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Nome do Usuário
        /// </summary>
        public string Nome { get; set; }

        /// <summary>
        /// Login do Usuário
        /// </summary>
        public string Login { get; set; }

        /// <summary>
        /// Indica se a propriedade está válida
        /// </summary>
        public bool EntidadeValida { get { return MensagensValidacoesEntidades().Count() == 0; } }
        
        #endregion [ Propriedades ]

        #region [ Métodos ]

        /// <summary>
        /// Lista de Mensagens de validações da Entidade.
        /// </summary>
        public IEnumerable<ValidacaoEntidade> MensagensValidacoesEntidades()
        {
            if (string.IsNullOrEmpty(Nome))
                yield return new ValidacaoEntidade { Mensagem = "O Nome do Usuário deve ser informado", TituloPropriedade = "Nome", NomePropriedade = "Nome" };

            if (string.IsNullOrEmpty(Login))
                yield return new ValidacaoEntidade { Mensagem = "O Login do Usuário deve ser informado", NomePropriedade = "CriadoPor", TituloPropriedade = "Criado por" };
        }

        #endregion [ Métodos ]
    }
}
